package com.hfb.mashibing.alip8.juc.c020_01_interview.A1B2C3;
/**
 *  互联网一线大厂面试题：
 *      徒手写出：2个不同的线程，交替输出A1B2C3。。。
 *
 * 线程排序问题
 * 思路：利用 CAS 和 volatile 的 flag，
 *      分别依次遍历字母队列和数字队列
 */
public class A1B2C3CAS0 {

    private static char[] charsLetter = "ABCDEFGHI".toCharArray();
    private static char[] charsNumber = "123456789".toCharArray();

    private static Thread t1,t2;
//    private static Object o = new Object();
    private static volatile boolean flag = false;


    public static void main(String[] args) {
        // 利用 volatile 自旋，也可以使用 AtomicInteger
        t1 = new Thread(()->{
            for (int i = 0; i < charsLetter.length; i++) {
                while (flag) {}
                System.out.print(charsLetter[i]);
                flag = true;
            }
            System.out.println();
        });

        t2 = new Thread(()->{
            for (int i = 0; i < charsNumber.length; i++) {
                while (!flag) {}
                System.out.print(charsNumber[i]);
                flag = false;
            }
        });

        t1.start();
        t2.start();
    }

}
